Depth to water annual water-year data migration

Inyo County, California

R
hydrology
monitoring wells
surface water flow
pumping volumes
LADWP data
OVGA
time series
This report documents the annual water-year migration of depth-to-water observations, including ingestion of ZRXP data, QA/QC screening, integration with the active database, and preparation of OVGA-formatted deliverables.
Author

Inyo County Water Department

Published

October 1, 2025

Modified

January 26, 2026

Abstract

Depth-to-water observations from LADWP monitoring wells are delivered after each water year. Data are exported from WISKI (water information system by Kisters) in ZRXP format, parsed programmatically, integrated with the active internal database, and exported in OVGA upload format.

The report summarizes QA/QC checks (record counts, filtered records) and indicator‑well hydrographs, and includes OVGA import procedures in the appendix. For annual updates, adjust the year values for 1) input file paths and the master database, 2) the master output file, and 3) the OVGA upload file. The index.qmd in this repository contains the full processing code and report text.

Data sources and preprocessing

Input files (WY2025):

  • DepthRP_2024-25.dat — depth to water from reference point (RP) elevation

  • DepthGE_2024-25.dat — depth to water below ground elevation

  • OwensValley_DepthWSE_2024-25.dat — water surface elevation

ZRXP format .DAT files
input data
# new data updates -------
#.dat ascii files
# file_pathWSE <-here('data','hydro','2022-23 Water Year Transfer Packet for ICWD','OwensValley_DepthWSE_2022-23.dat')
# file_pathRP <-here('data','hydro','2022-23 Water Year Transfer Packet for ICWD','DepthRP_2022-23.dat')
# file_pathGE <-here('data','hydro','2022-23 Water Year Transfer Packet for ICWD','DepthGE_2022-23.dat')


file_pathWSE <-here('data','hydro','2024-25 Water Year Transfer Packet for ICWD','OwensValley_DepthWSE_2024-25.dat')
file_pathRP <-here('data','hydro','2024-25 Water Year Transfer Packet for ICWD','DepthRP_2024-25.dat')
file_pathGE <-here('data','hydro','2024-25 Water Year Transfer Packet for ICWD','DepthGE_2024-25.dat')


wYear <- '2025'

parse_depth_file <- function(file_path, value_name) {
  dat_content <- readLines(file_path)
  data_list <- list()

  is_data_line <- function(line) {
    grepl("\\d+ \\d+\\.\\d+", line)
  }

  for (line in dat_content) {
    if (startsWith(line, "#TSPATH")) {
      staid <- sub('.*/([TVFRSW]\\w+).*', '\\1', line)
    }

    if (!startsWith(line, "#") && is_data_line(line) && !is.na(staid)) {
      data_list <- c(data_list, list(data.frame(staid, dateread = line)))
    }
  }

  data_df <- bind_rows(data_list) %>% select(staid, dateread) %>% na.omit()
  data_df <- data_df %>% separate(dateread, c("date", value_name), sep = " ")
  data_df[[value_name]] <- as.numeric(data_df[[value_name]])
  data_df
}

depthRP_path <- here('data','hydro','2025','depthRP.RDS')
depthGE_path <- here('data','hydro','2025','depthGE.RDS')
depthWSE_path <- here('data','hydro','2025','depthWSE.RDS')

depthRP <- if (file.exists(depthRP_path)) {
  readRDS(depthRP_path)
} else {
  depthRP <- parse_depth_file(file_pathRP, "dtw.rp")
  saveRDS(depthRP, file = depthRP_path)
  depthRP
}

depthGE <- if (file.exists(depthGE_path)) {
  readRDS(depthGE_path)
} else {
  depthGE <- parse_depth_file(file_pathGE, "dtw.bgs")
  saveRDS(depthGE, file = depthGE_path)
  depthGE
}

depthWSE <- if (file.exists(depthWSE_path)) {
  readRDS(depthWSE_path)
} else {
  depthWSE <- parse_depth_file(file_pathWSE, "wse")
  saveRDS(depthWSE, file = depthWSE_path)
  depthWSE
}

# ground surface elevation at staids
gse_staids <- read_csv(here('data','hydro', 'gse_staids.csv'))

# staids in ovga database------
# used to cross reference what will be accepted into an import
# need to filter out staids that aren't in the ovga list, otherwise import will fail
ovga_points <- read_csv(here("data","hydro","Owens_Monitoring_Points.csv"))

# reference point elevation - some staids don't have RP elevations. Identify these here for the current water year transfer
rpelev <- read_csv(here('data','hydro','rp_elev.csv'))
last_ovga_mw <- read_csv(here('output','ovga_uploads_mw_with_rpe_102023_092024_zn.csv'))

# historical water levels------
hist <- read_csv(here('output','Monitoring_Wells_Master_2024.csv'))
hist$date <- ymd(hist$date)

Raw input coverage

File Records Unique_staids Date_start Date_end
DepthRP_2024-25.dat 82831 743 2024-10-01 2025-09-30
DepthGE_2024-25.dat 74670 655 2024-10-01 2025-09-30
OwensValley_DepthWSE_2024-25.dat 86968 383 2024-10-01 2025-09-30

Each file repeats headers for each monitoring well. Extract the well ID from #TSPATH and join to observation rows (lines that do not start with #).

Monitoring points map (static)

Owens Valley monitoring points (north to south).
parse depthGE.dat
dat_content <- readLines(file_pathGE)

# Initialize variables to store data
data_list <- list()

# Function to check if a line contains timestamp and value
is_data_line <- function(line) {
  grepl("\\d+ \\d+\\.\\d+", line)
}

# Loop through each line in the file
for (line in dat_content) {
  # Check if the line starts with '#TSPATH'
  if (startsWith(line, "#TSPATH")) {
    # Extract 'staid' from the '#TSPATH' line
    staid <- sub('.*/([TVFRSW]\\w+).*', '\\1', line)
  }
  
  # Check if the line does not start with '#' and contains timestamp and value
  if (!startsWith(line, "#") && is_data_line(line) && !is.na(staid)) {
    # If the line does not start with '#' and contains timestamp and value,
    # add data to the list directly
    data_list <- c(data_list, list(data.frame(staid, dateread = line)))
  }
}

# Combine the data frames in the list into a single data frame
data_df <- bind_rows(data_list)

# Remove rows with NA values, Remove 'row' and 'value' columns
depthGE <- na.omit(data_df) %>% select(staid, dateread)

#separate the data column and assign numeric class to dtw
depthGE <- depthGE %>% separate(dateread, c("date", "dtw.bgs"),sep = " ") 
depthGE$dtw.bgs <- as.numeric(depthGE$dtw.bgs)
# head(depthGE)

saveRDS(depthGE, file = here('data','hydro','2025','depthGE.RDS'))

# notes: sub('.*/([TVFRSW]\\w+).*', '\\1', line) extracts the staid from the #TSPATH line.
[1] 74670
[1] 86968

Raw input coverage

Dataset File Exists Records Unique staids Date range
DepthRP DepthRP_2024-25.dat TRUE 82831 743 2024-10-01 to 2025-09-30
DepthGE DepthGE_2024-25.dat TRUE 74670 655 2024-10-01 to 2025-09-30
DepthWSE OwensValley_DepthWSE_2024-25.dat TRUE 86968 383 2024-10-01 to 2025-09-30
testwellupdate
# rename the columns
# clean up the date with formal date specification
testwell.up <- try %>% select(-date, -datetime) %>% rename(date = date.y.m.d) %>% mutate(source = "DWP")  
# head(testwell.up)
append updates to master database
## Append updates to master
testwells.combined <- bind_rows(hist, testwell.up) 

# head(testwells.combined)
# 1,145,360 records going back to 1971

# testwells.combined %>% n_distinct(staid)
# testwells.combined %>% distinct(staid) %>% nrow()
Metric Value
Annual update rows 89,289
Annual update staids 750
Active database rows 1,324,540
Active database staids 1,381

Data integration and outputs

Database exports

2023 water year

2024 water year

2025 water year

save master database updates
out_icwd <- here("output", "2025wy", "ICWD")
dir.create(out_icwd, recursive = TRUE, showWarnings = FALSE)

# single year
testwell.up %>% write_csv(file.path(out_icwd, "testwellwy2025.csv"))

# whole dataset
testwells.combined %>% write_csv(file.path(out_icwd, "Monitoring_Wells_Master_2025.csv"))

# 

Reference point elevation integration

convert RP dates
## RP can be continually changing so need to be recursive with the RP file for updates.

# date conversion
rpelev_date <- rpelev %>% 
  mutate(date = lubridate::mdy(date_c))

head(rpelev_date) %>%
  datatable(options = list(pageLength = 10, lengthChange = TRUE, scrollX = TRUE))
  count_unique_staids
1                 750

# A tibble: 10,079 × 4
# Groups:   staid [750]
   staid date       daily_count daily_count_category
   <chr> <date>           <int> <fct>               
 1 V271  2024-10-01          96 (50,100]            
 2 V271  2024-10-02          96 (50,100]            
 3 V271  2024-10-03          96 (50,100]            
 4 V271  2024-10-04          96 (50,100]            
 5 V271  2024-10-05          96 (50,100]            
 6 V271  2024-10-06          96 (50,100]            
 7 V271  2024-10-07          96 (50,100]            
 8 V271  2024-10-08          96 (50,100]            
 9 V271  2024-10-09          96 (50,100]            
10 V271  2024-10-10          96 (50,100]            
# ℹ 10,069 more rows
# A tibble: 10 × 2
   daily_count_category count_unique_staids
   <fct>                              <int>
 1 [0,1]                                749
 2 (1,2]                                 21
 3 (2,3]                                  4
 4 (3,4]                                  5
 5 (4,5]                                  5
 6 (5,10]                                 6
 7 (10,15]                                3
 8 (15,20]                                6
 9 (20,50]                               10
10 (50,100]                               1
      .
1 [0,1]

33 out of 750 staids have multiple measurements per day (some hourly and a few up to 15‑minute intervals). 32 of those 33 staids also have single‑measurement days.

We harmonize these to daily values to reduce data size and make the annual update consistent across measurement frequencies. The next steps below show how we aggregate to daily means and then summarize by water year for export.

43 out of 785 staids have more than 1k records, 9 over 5k each. The rest of the staids have less than 32 measures a year.

2025 water year summary: updated with WY2025 outputs.

avg daily dtw - aggregating
# daily average dtw
dtwrpavg.rpelev <- dtwrp.rpelev %>% 
  group_by(staid, date, rp_elev) %>% 
  summarise(dtw.rp =  round(mean(dtw.rp),2))


#19,865 1-24-24
# dtwrpavg.rpelevBeta <- dtwrp.rpelev %>% group_by(staid, date, rp_elev) %>% summarise(dtw.rp =  round(mean(dtw.rp),2),
#           dailyCount = n()
#           ) %>% arrange(desc(dailyCount))
dtwrpavg.rpelev
# A tibble: 10,079 × 4
# Groups:   staid, date [10,079]
   staid date       rp_elev dtw.rp
   <chr> <date>       <dbl>  <dbl>
 1 F033  2024-10-10   3834.   4.56
 2 F033  2024-11-07   3834.   4.56
 3 F033  2024-12-05   3834.   4.56
 4 F033  2025-01-08   3834.   4.56
 5 F033  2025-03-10   3834.   4.56
 6 F033  2025-04-14   3834.   4.56
 7 F033  2025-06-09   3834.   4.56
 8 F033  2025-07-11   3834.   4.56
 9 F033  2025-08-06   3834.   4.56
10 F033  2025-09-04   3834.   4.56
# ℹ 10,069 more rows
avg daily dtw - aggregating
# datatable(dtwrpavg.rpelev,
  # caption = 'daily averaging reduces data')
assign TR vs ES method based on measurement frequency
# more than 4 reads per month, 48 per year, pressure transducer TR, less electric sounder ES
# Number of records from staids with rp elevations
# classify method TR v ES by frequency of measurements.
# check

record.number <- dtwrp.rpelev %>% 
  filter(!is.na(rp_elev)) %>% 
  group_by(staid) %>% 
  summarise(count.with.rpe = n()) %>% 
  mutate(MMethod = case_when(count.with.rpe >= 48 ~ "TR",
                            count.with.rpe < 48~ "ES"))
# if there are four reads per day, once per month, approximates to 48. quick and dirty separation. a list of pressure transducer staids would be better if it could be maintained.

head(record.number %>% arrange(-count.with.rpe))
# A tibble: 6 × 3
  staid count.with.rpe MMethod
  <chr>          <int> <chr>  
1 V271            3190 TR     
2 V202            1347 TR     
3 T387            1346 TR     
4 V251            1346 TR     
5 T389            1239 TR     
6 T438              17 ES     
number of records per staid
# records per staid
LA.staids <- dtwrpavg.rpelev %>% group_by(staid) %>% summarise(records = n())
# head(LA.staids)
# LA.staids %>% arrange(desc(records))
#785
staids in data that are also on ovga list
LA.staids.in.ovga <- LA.staids %>% semi_join(ovga_points, by = c("staid"="mon_pt_name"))

# LA.staids.in.ovga %>% nrow()
#714
monitoring points missing rp elevations after join
# monitoring points missing rp elevations after join
# LA.staids.in.ovga
# find how many staids are missing rp elevation
na.rp.elev <- dtwrpavg.rpelev %>% 
  semi_join(LA.staids.in.ovga, by = 'staid') %>% 
  filter(is.na(rp_elev)) %>% 
  group_by(staid) %>% 
  summarise(count.na = n())
anti_join take NA rp elev off
# anti_join removes records in x that match y
# Select only data with rp elevations (not na)
rpselect <- dtwrpavg.rpelev %>% anti_join(na.rp.elev, by = "staid")
# rpselect
# 19,793 1.24.2024

Filter to records with RP elevation and valid OVGA monitoring points.

semi_join retain records in ovga staid list
# 6,048 points including monitoring wells, pumping wells, surface water gauging stations.
# semi_join returns records in x with a match in y
rpselect2 <- rpselect %>% semi_join(ovga_points, by = c("staid"="mon_pt_name"))
# head(rpselect2)
rpselect2 %>% arrange(staid,desc(date))
# A tibble: 5,584 × 4
# Groups:   staid, date [5,584]
   staid date       rp_elev dtw.rp
   <chr> <date>       <dbl>  <dbl>
 1 F033  2025-09-04   3834.   4.56
 2 F033  2025-08-06   3834.   4.56
 3 F033  2025-07-11   3834.   4.56
 4 F033  2025-06-09   3834.   4.56
 5 F033  2025-04-14   3834.   4.56
 6 F033  2025-03-10   3834.   4.56
 7 F033  2025-01-08   3834.   4.56
 8 F033  2024-12-05   3834.   4.56
 9 F033  2024-11-07   3834.   4.56
10 F033  2024-10-10   3834.   4.56
# ℹ 5,574 more rows
semi_join retain records in ovga staid list
# datatable(rpselect2)

OVGA template and export

create ovga template
# methodinfer %>% distinct()
methodinfer <- record.number %>% select(-count.with.rpe)
# %>% distinct(staid)

upload <- rpselect2 %>% 
  left_join(methodinfer, by = "staid") %>% 
  # select(-latest_rp_date) %>% 
  select(WellName = staid, 
         DateMeasured = date, 
         DepthToWater = dtw.rp, 
         ReferencePointElevation = rp_elev
         ,
         MMethod
         ) %>% 
  mutate(ReportingDate = "",
         # ExclusionCondition = "" ,
         QAQCLevel = "High",
         MeasMethod = MMethod,#"ES",# from join above
         NoMeasFlag = "",
         QuestMeasFlag = "",
         DataSource = "LADWP",
         CollectedBy = "LADWP",
         UseInReporting = "yes",
         Notes = "") %>% 
  select(-MMethod)%>%
  filter(DepthToWater < 500 & !is.na(DepthToWater) & DepthToWater != 'NA' & DepthToWater != -777 & ReferencePointElevation !=0) %>% relocate(ReportingDate, .after = DateMeasured)

upload 
# A tibble: 5,515 × 13
# Groups:   WellName, DateMeasured [5,515]
   WellName DateMeasured ReportingDate DepthToWater ReferencePointElevation
   <chr>    <date>       <chr>                <dbl>                   <dbl>
 1 F033     2024-10-10   ""                    4.56                   3834.
 2 F033     2024-11-07   ""                    4.56                   3834.
 3 F033     2024-12-05   ""                    4.56                   3834.
 4 F033     2025-01-08   ""                    4.56                   3834.
 5 F033     2025-03-10   ""                    4.56                   3834.
 6 F033     2025-04-14   ""                    4.56                   3834.
 7 F033     2025-06-09   ""                    4.56                   3834.
 8 F033     2025-07-11   ""                    4.56                   3834.
 9 F033     2025-08-06   ""                    4.56                   3834.
10 F033     2025-09-04   ""                    4.56                   3834.
# ℹ 5,505 more rows
# ℹ 8 more variables: QAQCLevel <chr>, MeasMethod <chr>, NoMeasFlag <chr>,
#   QuestMeasFlag <chr>, DataSource <chr>, CollectedBy <chr>,
#   UseInReporting <chr>, Notes <chr>

2023 water year

Completed 1-24-24

csv

2024 water year

Completed 12-10-24

csv

2025 water year

Completed 1-26-26

csv

  • 9329 well-days in update with rp elevations

  • 673 staids in update with rp elevations

  • 5584 well-days in update with rp elevations and in ovga list

  • 598 staids in update with rp elevations and in ovga list

  • 5515 well-days in the ovga upload

  • 590 staids in the ovga upload

OVGA export and comparison

Review this comparison after WY2025 processing to confirm which staids are missing and whether WSE-derived RP calculations are needed.

Rows: 12
Columns: 11
$ staid   <chr> "T755", "T755", "T755", "T755", "T755", "T755", "T755", "T755"…
$ dtw.rp  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ wse     <dbl> 4208.76, 4208.51, 4208.51, 4208.28, 4208.51, 4208.51, 4208.28,…
$ dtw.bgs <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
$ year    <dbl> 2024, 2024, 2024, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 20…
$ month   <dbl> 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9
$ day     <int> 22, 19, 9, 22, 12, 12, 16, 15, 16, 14, 18, 23
$ hour    <int> 14, 13, 10, 10, 9, 9, 9, 14, 9, 10, 15, 13
$ minute  <int> 2, 39, 40, 27, 27, 37, 46, 19, 51, 15, 17, 12
$ date    <date> 2024-10-22, 2024-11-19, 2024-12-09, 2025-01-22, 2025-02-12, 20…
$ source  <chr> "DWP", "DWP", "DWP", "DWP", "DWP", "DWP", "DWP", "DWP", "DWP",…
save OVGA import
out_ovga <- here("output", "2025wy", "OVGA")
dir.create(out_ovga, recursive = TRUE, showWarnings = FALSE)
upload %>% write_csv(file.path(out_ovga, "ovga_uploads_mw_with_rpe_102024_092025_zn.csv"))
datatable
datatable(
  upload,
  caption = "2024-2025 water year upload formatted for OVGA data management system.",
  options = list(pageLength = 10, lengthChange = TRUE, scrollX = TRUE),
  class = "compact stripe"
)
Metric Value
Rows in OVGA upload 5515
Unique monitoring points 590
Date range 2024-10-01 to 2025-09-30

Results: QA/QC and hydrographs

start of the water year is demarcated for 2022 and 2023

Laws

Hydrographs of indicator wells in the Laws wellfield.

Bishop

Hydrographs of indicator wells in the Bishop wellfield.

Big Pine

Hydrographs of indicator wells in the Big Pine wellfield. T565, and V017GC are in south Big Pine near W218/219.

Taboose Aberdeen

Hydrographs of indicator wells in the Taboose-Aberdeen wellfield.

Thibaut Sawmill

Hydrographs of indicator wells in Thibaut-Sawmill wellfield.

Independence Oak

Hydrographs of indicator wells in Independence-Oak wellfield.

Symmes Shepherd

Hydrographs of indicator wells in Symmes-Shepherd wellfield.

Bairs George

Hydrographs of indicator wells in Bairs George wellfield.

The tables below summarize follow-up QA/QC checks after the hydrograph review.

Monitoring points present in the update but not on the OVGA list

# A tibble: 6 × 2
  staid records
  <chr>   <int>
1 FS3D       12
2 FS3S       12
3 S004        1
4 S005        1
5 S006        1
6 S007        1

Points missing RP elevations where GSE is missing

# A tibble: 6 × 2
  staid count.na
  <chr>    <int>
1 T916        12
2 T917        12
3 T920         4
4 T921         4
5 T924         4
6 T926         4

Points missing RP elevations where GSE exists

# A tibble: 6 × 2
  staid count.na
  <chr>    <int>
1 F082         5
2 F122         1
3 T013U       10
4 W059        12
5 W060        12
6 W063        12

Missing-RP points that are not on the OVGA list

# A tibble: 0 × 2
# ℹ 2 variables: staid <chr>, count.na <int>

Missing-RP points that are on the OVGA list

# A tibble: 6 × 2
  staid count.na
  <chr>    <int>
1 T916        12
2 T917        12
3 T920         4
4 T921         4
5 T924         4
6 T926         4
# A tibble: 14 × 2
   staid count.na
   <chr>    <int>
 1 T916        12
 2 T917        12
 3 T920         4
 4 T921         4
 5 T924         4
 6 T926         4
 7 T930         4
 8 W355         7
 9 W410        12
10 W411        12
11 W412        12
12 W413        11
13 W423        12
14 W425        13

Total record count missing RP elevations

# A tibble: 1 × 1
  count.na
     <int>
1      750

Sample records from points missing RP elevations

# A tibble: 6 × 4
# Groups:   staid, date [6]
  staid date       rp_elev dtw.rp
  <chr> <date>       <dbl>  <dbl>
1 F082  2025-05-15      NA   1.85
2 F082  2025-06-11      NA   1.85
3 F082  2025-07-14      NA   1.76
4 F082  2025-08-11      NA   1.81
5 F082  2025-09-08      NA   1.75
6 F122  2025-04-09      NA   0.37
 [1] "F082"  "F122"  "T013U" "T916"  "T917"  "T920"  "T921"  "T924"  "T926" 
[10] "T930"  "W059"  "W060"  "W063"  "W065"  "W069"  "W074"  "W092"  "W106" 
[19] "W109"  "W110"  "W111"  "W114"  "W118"  "W140"  "W155"  "W218"  "W219" 
[28] "W222"  "W223"  "W232"  "W236"  "W239"  "W244"  "W245"  "W247"  "W248" 
[37] "W330"  "W332"  "W342"  "W343"  "W344"  "W345"  "W346"  "W348"  "W349" 
[46] "W351"  "W354"  "W355"  "W370"  "W371"  "W374"  "W375"  "W377"  "W382" 
[55] "W383"  "W384"  "W385"  "W387"  "W388"  "W391"  "W392"  "W393"  "W394" 
[64] "W395"  "W396"  "W398"  "W401"  "W403"  "W406"  "W407"  "W409"  "W410" 
[73] "W411"  "W412"  "W413"  "W423"  "W425" 
  • 77 monitoring points missing rp elevation and omitted from import

Appendix: GLA Data Depth to Water Import Procedures

confirmed updated 1/23/24 zn

GLA Data Web application. The uploaded Excel Workbook must contain one spreadsheet with 13 columns with the following names in this order:

Field Name Data Type Required
WellName Text Yes
DateMeasured Date Yes
ReportingDate Date No
DepthToWater Numeric Conditional
ReferencePointElevation Numeric Conditional
QAQCLevel Text Yes
MeasMethod Text Yes
NoMeasFlag Text Conditional
QuestMeasFlag Text No
DataSource Text Yes
CollectedBy Text No
UseInReporting Text No
Notes Text Conditional

WellName The WellName column is required and must contain the name of a monitoring point within the basin selected when the file was uploaded.

DateMeasured The DateMeasured column is required. The field must be a date and can not be in the future nor more than 100 years in the past.

2-1-1 import error says that ReportingDate is not part of the column list ReportingDate The ReportingDate column must be blank or a date. If the field is a date, it must be within 14 days of DateMeasured. If left blank, the column is populated with the value in the DateMeasured column. This field allows users to assign a measurement to an adjacent month for reporting purposes. For example, a measurement collected on May 31st may be intended to be used as an April measurement.

DepthToWater This column must be blank or numeric. DepthToWater is the number of feet from the reference point. If blank, NoMeasFlag is required and ReferencePointElevation must also be blank. Positive values indicate the water level is below the top of the casing, while negative values indicate the water level is above the top of the casing (flowing artesian conditions).

ReferencePointElevation This column must be blank or numeric. ReferencePointElevation is the elevation in feet from where the depth to water measurement took place. If blank, NoMeasFlag is required and DepthToWater must also be blank.

QAQCLevel This field is required and must be one of the following values:

  • High - Data are of high quality

  • Medium - Data are inconsistent with previous values or sampling conditions were not ideal. Values will be displayed with a different color on plots.

  • Low - Data are not considered suitable for display or analysis due to inconsistencies with previous values or poor sampling conditions. Preserves sample in database for record-keeping purposes but not displayed on figures, tables, or used in analyses.

  • Undecided - QA/QC level has not been determined.

MeasMethod This field is required and must be one of the following values:

Code Description
ES Electric sounder measurement
ST Steel tape measurement
AS Acoustic or sonic sounder
PG Airline measurement, pressure gage, or manometer
TR Electronic pressure transducer
OTH Other
UNK Unknown

NoMeasFlag This field must be blank if DepthToWater and ReferencePointElevation contain values. Otherwise, this field is required and must be one of the following values:

Code Description
0 Measurement discontinued
1 Pumping
2 Pump house locked
3 Tape hung up
4 Can’t get tape in casing
5 Unable to locate well
6 Well has been destroyed
7 Special/other
8 Casing leaking or wet
9 Temporary inaccessible
D Dry well
F Flowing artesian

QuestMeasFlag This field must be blank or be one of the following values:

Code Description
0 Caved or deepened
1 Pumping
2 Nearby pump operating
3 Casing leaking or wet
4 Pumped recently
5 Air or pressure gauge measurement
6 Other
7 Recharge or surface water effects near well
8 Oil or foreign substance in casing
9 Acoustical sounder
E Recently flowing
F Flowing
G Nearby flowing
H Nearby recently flowing

DataSource This field is required and used to identify where the water level data came from (e.g., entity, database, file, etc.). Limit is 100 characters. default = “LADWP”

CollectedBy This field is optional and used to identify the person that physically collected the data. Limit is 50 characters. default = “LADWP”

UseInReporting This field is optional and used to filter measurements used in reports. If included, the value must be “yes”, “no”, “true”, “false”, “1” or “0”. If blank, a value of “yes” is assumed. default = “yes”

Notes This field must be populated if NoMeasFlag is 7 (special/other) or QuestMeasFlag is 6 (other), otherwise this field is optional. Limit is 255 characters. default = “blank”

Citation

BibTeX citation:
@report{county_water_department2024,
  author = {County Water Department, Inyo},
  publisher = {Inyo County Water Department},
  title = {Depth to Water Annual Water-Year Data Migration},
  date = {2024-12-10},
  url = {https://inyo-gov.github.io/hydro-data/},
  langid = {en}
}
For attribution, please cite this work as:
County Water Department, Inyo. 2024. “Depth to Water Annual Water-Year Data Migration.” Data Report. Inyo County Water Department. https://inyo-gov.github.io/hydro-data/.